import { useState, useCallback } from "react"

export default function useFetch(reqObj, callback) {
    /* 
    reqObj
    {
        url：请求的地址
        method:请求方法
        type:Content-type类型
       
    }
    callback:回调函数
     */
    //存储数据
    const [data, setData] = useState([])
    //添加一个state来记录数据是否正在加载
    const [loading, setLoading] = useState(false)
    //创建一个state来记录是否数据请求失败
    const [errorMsg, setErrorMsg] = useState(null)

    // 发送请求函数
    const fetchData = useCallback(async (body) => {
        try {
            setLoading(true)
            setErrorMsg(null)
            const res = await fetch('http://localhost:1337/api/' + reqObj.url, {
                method: reqObj.method || 'get',
                headers: {
                    "Content-type": "application/json"
                },
                //get方法没有返回体
                body: body? JSON.stringify({ data: body }):null,

            })
            if (res.ok) {
                const { data, meta } = await res.json()
                setData(data)
                setLoading(false)
                callback && callback()
            } else {
                throw new Error('数据加载失败')
            }
        } catch (e) {
            setLoading(false)
            setErrorMsg(e.message)
        }
    }, [])
    return {
        data,
        loading,
        errorMsg,
        fetchData
    }
}